suppressPackageStartupMessages(library(readxl))suppressPackageStartupMessages(library(tidyverse))suppressPackageStartupMessages(library(plotly))suppressPackageStartupMessages(library(fmsb))data =read_excel("Project_1_Data.xlsx", sheet ="pooled123")filteredData =select(data, Date, PID, BSSQ_1:BSSQ_16, ASSQ_1:ASSQ_16, age, VRexperience, ssq_full, gender, sm)#we only want to look at those that did not undergo social modelling conditionsfilteredData =subset(filteredData, sm =="NO_SM")#reclasss VR experience as factor (was chr)filteredData$VRexperience =as.factor(filteredData$VRexperience)#we want to filter this data even further and split it into age groups#once in age groups, calculate the mean change for each of the age groups for each symptomfilteredData =mutate(filteredData, age_group =case_when( age >45~"above 45", age >=38~"38 to 45", age >=30~"30 to 37", age >=22~"22 to 29", age >=16~"16 to 21"))symptoms =c("discomfort","fatigue", "headache","eyestrain","difficulty_focusing","salivation","sweating","nausea","difficulty_concentrating","fullness_of_head","blurred_vision","dizziness_o","dizziness_c","vertigo","stomach_awareness","burping")for (i in1:length(symptoms)) { filteredData[[paste0("d_", symptoms[[i]])]] <- filteredData[[paste0("ASSQ_", i)]] - filteredData[[paste0("BSSQ_", i)]]} # Borna's friend made fun of us for doing this manually so we got chatGPT to fix ityes_means_vector <-numeric(length(symptoms))no_means_vector =numeric(length(symptoms))# Loop through symptoms and calculate the mean for each onefor (i in1:length(symptoms)) {# Calculate the mean for the current symptom column yes_means_vector[i] <-mean(filter(filteredData, VRexperience =="Yes")[[paste0("d_", symptoms[i])]]) no_means_vector[i] <-mean(filter(filteredData, VRexperience =="No")[[paste0("d_", symptoms[i])]])}# Create a data frame from the vectormeans_per_symptom <-data.frame(symptom = symptoms, yes_mean_value = yes_means_vector, no_means_value = no_means_vector)
Code
#calculating differences between baseline and active SSQ for each symptomfilteredData =mutate(filteredData, d_discomfort = ASSQ_1 - BSSQ_1)filteredData =mutate(filteredData, d_fatigue = ASSQ_2 - BSSQ_2)filteredData =mutate(filteredData, d_headache = ASSQ_3 - BSSQ_3)filteredData =mutate(filteredData, d_eyestrain = ASSQ_4 - BSSQ_4)filteredData =mutate(filteredData, d_difficulty_focusing = ASSQ_5 - BSSQ_5)filteredData =mutate(filteredData, d_salivation = ASSQ_6 - BSSQ_6)filteredData =mutate(filteredData, d_sweating = ASSQ_7 - BSSQ_7)filteredData =mutate(filteredData, d_nausea = ASSQ_8 - BSSQ_8)filteredData =mutate(filteredData, d_difficulty_concentrating = ASSQ_9 - BSSQ_9)filteredData =mutate(filteredData, d_fullness_of_head = ASSQ_10 - BSSQ_10)filteredData =mutate(filteredData, d_blurred_vision = ASSQ_11 - BSSQ_11)filteredData =mutate(filteredData, d_dizziness_o = ASSQ_12 - BSSQ_12)filteredData =mutate(filteredData, d_dizziness_c = ASSQ_13 - BSSQ_13)filteredData =mutate(filteredData, d_vertigo = ASSQ_14 - BSSQ_14)filteredData =mutate(filteredData, d_stomach_awareness = ASSQ_15 - BSSQ_15)filteredData =mutate(filteredData, d_burping = ASSQ_16 - BSSQ_16)#convert the age groups into factors#filteredData$age_group = as.factor(filteredData$age_group)#renaming columns to be more informativenames(filteredData)[names(filteredData) =='BSSQ_1'] <-'BSSQ_discomfort'names(filteredData)[names(filteredData) =='BSSQ_2'] <-'BSSQ_fatigue'names(filteredData)[names(filteredData) =='BSSQ_3'] <-'BSSQ_headache'names(filteredData)[names(filteredData) =='BSSQ_4'] <-'BSSQ_eyestrain'names(filteredData)[names(filteredData) =='BSSQ_5'] <-'BSSQ_difficulty_focusing'names(filteredData)[names(filteredData) =='BSSQ_6'] <-'BSSQ_salivation'names(filteredData)[names(filteredData) =='BSSQ_7'] <-'BSSQ_sweating'names(filteredData)[names(filteredData) =='BSSQ_8'] <-'BSSQ_nausea'names(filteredData)[names(filteredData) =='BSSQ_9'] <-'BSSQ_difficulty_concentrating'names(filteredData)[names(filteredData) =='BSSQ_10'] <-'BSSQ_fullness_of_head'names(filteredData)[names(filteredData) =='BSSQ_11'] <-'BSSQ_blurred_vision'names(filteredData)[names(filteredData) =='BSSQ_12'] <-'BSSQ_dizziness_o'names(filteredData)[names(filteredData) =='BSSQ_13'] <-'BSSQ_dizziness_c'names(filteredData)[names(filteredData) =='BSSQ_14'] <-'BSSQ_vertigo'names(filteredData)[names(filteredData) =='BSSQ_15'] <-'BSSQ_stomach_awareness'names(filteredData)[names(filteredData) =='BSSQ_16'] <-'BSSQ_burping'names(filteredData)[names(filteredData) =='ASSQ_1'] <-'ASSQ_discomfort'names(filteredData)[names(filteredData) =='ASSQ_2'] <-'ASSQ_fatigue'names(filteredData)[names(filteredData) =='ASSQ_3'] <-'ASSQ_headache'names(filteredData)[names(filteredData) =='ASSQ_4'] <-'ASSQ_eyestrain'names(filteredData)[names(filteredData) =='ASSQ_5'] <-'ASSQ_difficulty_focusing'names(filteredData)[names(filteredData) =='ASSQ_6'] <-'ASSQ_salivation'names(filteredData)[names(filteredData) =='ASSQ_7'] <-'ASSQ_sweating'names(filteredData)[names(filteredData) =='ASSQ_8'] <-'ASSQ_nausea'names(filteredData)[names(filteredData) =='ASSQ_9'] <-'ASSQ_difficulty_concentrating'names(filteredData)[names(filteredData) =='ASSQ_10'] <-'ASSQ_fullness_of_head'names(filteredData)[names(filteredData) =='ASSQ_11'] <-'ASSQ_blurred_vision'names(filteredData)[names(filteredData) =='ASSQ_12'] <-'ASSQ_dizziness_o'names(filteredData)[names(filteredData) =='ASSQ_13'] <-'ASSQ_dizziness_c'names(filteredData)[names(filteredData) =='ASSQ_14'] <-'ASSQ_vertigo'names(filteredData)[names(filteredData) =='ASSQ_15'] <-'ASSQ_stomach_awareness'names(filteredData)[names(filteredData) =='ASSQ_16'] <-'ASSQ_burping'#isolating the data dictionarydata_dict =read_excel("Project_1_Data.xlsx", sheet ="data_dictionary")#filter into groups with experience or notwithVRexperience =filter(filteredData, VRexperience =='Yes')noVRexperience =filter(filteredData, VRexperience =='No')#taking averages for with/without experienceyes_avg_d_discomfort =mean(withVRexperience$d_discomfort)yes_avg_d_fatigue =mean(withVRexperience$d_fatigue)yes_avg_d_headache =mean(withVRexperience$d_headache)yes_avg_d_eyestrain =mean(withVRexperience$d_eyestrain)yes_avg_d_difficulty_focusing =mean(withVRexperience$d_difficulty_focusing)yes_avg_d_salivation =mean(withVRexperience$d_salivation)yes_avg_d_sweating =mean(withVRexperience$d_sweating)yes_avg_d_nausea =mean(withVRexperience$d_nausea)yes_avg_d_difficulty_concentrating =mean(withVRexperience$d_difficulty_concentrating)yes_avg_d_fullness =mean(withVRexperience$d_fullness_of_head)yes_avg_d_vision =mean(withVRexperience$d_blurred_vision)yes_avg_d_dizziness_o =mean(withVRexperience$d_dizziness_o)yes_avg_d_dizziness_c =mean(withVRexperience$d_dizziness_c)yes_avg_d_vertigo =mean(withVRexperience$d_vertigo)yes_avg_d_stomach =mean(withVRexperience$d_stomach_awareness)yes_avg_d_burping =mean(withVRexperience$d_burping)no_avg_d_discomfort =mean(noVRexperience$d_discomfort)no_avg_d_fatigue =mean(noVRexperience$d_fatigue)no_avg_d_headache =mean(noVRexperience$d_headache)no_avg_d_eyestrain =mean(noVRexperience$d_eyestrain)no_avg_d_difficulty_focusing =mean(noVRexperience$d_difficulty_focusing)no_avg_d_salivation =mean(noVRexperience$d_salivation)no_avg_d_sweating =mean(noVRexperience$d_sweating)no_avg_d_nausea =mean(noVRexperience$d_nausea)no_avg_d_difficulty_concentrating =mean(noVRexperience$d_difficulty_concentrating)no_avg_d_fullness =mean(noVRexperience$d_fullness_of_head)no_avg_d_vision =mean(noVRexperience$d_blurred_vision)no_avg_d_dizziness_o =mean(noVRexperience$d_dizziness_o)no_avg_d_dizziness_c =mean(noVRexperience$d_dizziness_c)no_avg_d_vertigo =mean(noVRexperience$d_vertigo)no_avg_d_stomach =mean(noVRexperience$d_stomach_awareness)no_avg_d_burping =mean(noVRexperience$d_burping)#taking averages for different age groupsgrp1 =filter(filteredData, age_group =='16 to 21')grp2 =filter(filteredData, age_group =='22 to 29')grp3 =filter(filteredData, age_group =='30 to 37')grp4 =filter(filteredData, age_group =='38 to 45')grp5 =filter(filteredData, age_group =='above 45')mean_sqq_ages =c(mean(grp1$ssq_full),mean(grp2$ssq_full),mean(grp3$ssq_full),mean(grp4$ssq_full),mean(grp5$ssq_full) )data_by_age_group =data.frame(age_group =c("16 to 21", '22 to 29','30 to 37','38 to 45','Above 45'),mean_ssq = mean_sqq_ages)filteredData =mutate(filteredData, "generation"=case_when(year(Date) - age >=2010~"a", year(Date) - age >=1997~"Z", year(Date) - age >=1981~"Y", year(Date) - age >=1965~"X", TRUE~"Old"))
We specifically looked at participants that did not undego any social modelling; 69 participants, each with 51 variables recorded. Our project focused the following variables:
Baseline SSQ (BSSQ), Active SSQ (ASSQ), and SSQ_Fullof 16 symptoms (quantitative, discrete): self-reported symptom severity before and after undergoing VR respectively, on a scale of 1 to 10.
Participants’ VRexperience (qualitative, nominal); sorted by experience to see how symptoms differed.
age of participants (quantitative, discrete); they were then sorted into age groups.
The change (\(\Delta\)) between BSSQ and ASSQ was calculated for each participant for each symptom, and we took the average \(\Delta\) for each symptom for each group (VRexperience and age_group) (quantitative, discrete).
<<<<<<< HEAD
=======
>>>>>>> 588ba637ff93f216fa9b7b06208d476d01c0f75e
Limitations
Self-reporting bias for both BSSQ and ASSQ which makes the values prone to being over or underestimates by each participant.
VRexperience is a binary qualitative classification, it is not descriptive of the nature, amount or frequency, and that those with more than 10 VR experiences were excluded.
Research Question
What is the effect of past VR experience on the symptoms experienced by people?
plt =ggplot(filteredData, aes(x = VRexperience, y = ssq_full, fill = VRexperience)) +geom_boxplot() +theme_minimal() +labs(x ="VR Experience", y ="Full SSQ")ggplotly(plt)
>>>>>>> 588ba637ff93f216fa9b7b06208d476d01c0f75e
Those with and without VR experience reported varied severity of symptoms. Interestingly, the VR experienced group saw a greater median ssq_full, at 7.0 compared to -0.5 for those without experience, indicating those with experience reported more severe symptoms afterwards. VR experienced participants also showed a greater IQR than those without, at 16.25 and 8.5 respectively, pointing to experienced users reporting less consistent symptom severity.
Code
<<<<<<< HEAD
library(tidyverse)library(plotly)plt =ggplot(filteredData, aes(x =as.factor(gender) , y = ssq_full, group = VRexperience, fill = VRexperience)) +geom_boxplot(position ="dodge") +labs(x ="gender", y ="Full SSQ")plt
The spider-chart above reinforces what we see in the box-plot, with VR experienced users all indicating a higher average \(\Delta\) for almost all of the 16 symptoms.
These observations are in contrast to [insert article(s) here]
Code
ggplot(filteredData) +geom_boxplot(aes(x ="Discomfort", y = d_discomfort, fill = VRexperience)) +geom_boxplot(aes(x ="Fatigue", y = d_fatigue, fill = VRexperience)) +geom_boxplot(aes(x ="Headache", y = d_headache, fill = VRexperience)) +geom_boxplot(aes(x ="Eyestrain", y = d_eyestrain, fill = VRexperience)) +geom_boxplot(aes(x ="Difficulty Focusing", y = d_difficulty_focusing, fill = VRexperience)) +geom_boxplot(aes(x ="Salivation", y = d_salivation, fill = VRexperience)) +geom_boxplot(aes(x ="Sweating", y = d_sweating, fill = VRexperience)) +geom_boxplot(aes(x ="Nausea", y = d_nausea, fill = VRexperience)) +geom_boxplot(aes(x ="Difficulty Concentrating", y = d_difficulty_concentrating, fill = VRexperience)) +geom_boxplot(aes(x ="Fullness of Head", y = d_fullness_of_head, fill = VRexperience)) +geom_boxplot(aes(x ="Blurred Vision", y = d_blurred_vision, fill = VRexperience)) +geom_boxplot(aes(x ="Dizziness (o)", y = d_dizziness_o, fill = VRexperience)) +geom_boxplot(aes(x ="Dizziness (c)", y = d_dizziness_c, fill = VRexperience)) +geom_boxplot(aes(x ="Vertigo", y = d_vertigo, fill = VRexperience)) +geom_boxplot(aes(x ="Stomach Awareness", y = d_stomach_awareness, fill = VRexperience)) +theme_minimal() +labs(title ="VR Experience and Symptom Change",x ="Symptom",y ="Change in Severity") +theme(axis.text.x =element_text(angle =45, hjust =1))
>>>>>>> 588ba637ff93f216fa9b7b06208d476d01c0f75e
Code
library(tidyverse)library(plotly)plt =ggplot(filteredData, aes(x =as.factor(gender) , y = ssq_full, group = VRexperience, fill = VRexperience)) +geom_boxplot(position ="dodge") +labs(x ="gender", y ="Full SSQ")plt
library(tidyverse)library(plotly)plt =ggplot(filteredData, aes(x = VRexperience, y = d_dizziness_c)) +geom_boxplot() +labs(x ="VR Experience", y ="Change in BSSQ and ASSQ-Dizziness (Eyes Closed)")ggplotly(plt)
Code
#fivenum(withVRexperience$d_dizziness_c)#fivenum(noVRexperience$d_dizziness_c)##mean(withVRexperience$d_dizziness_c)#mean(noVRexperience$d_dizziness_c)##sd(withVRexperience$d_dizziness_c)#sd(noVRexperience$d_dizziness_c)#since from the boxplots we can see that both sets have a fair number of outliers which could affect the mean, the median + IQR may be a better measure of spread
=======
library(tidyverse)library(plotly)plt =ggplot(filteredData, aes(x = VRexperience, y = d_dizziness_c)) +geom_boxplot() +labs(x ="VR Experience", y ="Change in BSSQ and ASSQ-Dizziness (Eyes Closed)")ggplotly(plt)
Code
#fivenum(withVRexperience$d_dizziness_c)#fivenum(noVRexperience$d_dizziness_c)##mean(withVRexperience$d_dizziness_c)#mean(noVRexperience$d_dizziness_c)##sd(withVRexperience$d_dizziness_c)#sd(noVRexperience$d_dizziness_c)#since from the boxplots we can see that both sets have a fair number of outliers which could affect the mean, the median + IQR may be a better measure of spread
library(tidyverse)library(plotly)plt =ggplot(filteredData, aes(x = age_group, y = d_dizziness_c)) +geom_boxplot() +labs(x ="Age Group", y ="Change in BSSQ and ASSQ-Dizziness(Eyes Closed)")ggplotly(plt)
Code
library(tidyverse)library(plotly)plt =ggplot(filteredData, aes(x = VRexperience, y = d_vertigo)) +geom_boxplot() +labs(x ="VR Experience", y ="Vertigo")ggplotly(plt)
library(tidyverse)library(plotly)plt =ggplot(filteredData, aes(x = age_group, y = d_vertigo)) +geom_boxplot() +labs(x ="Age Group", y ="Change in BSSQ and ASSQ - Vertigo")ggplotly(plt)
>>>>>>> 588ba637ff93f216fa9b7b06208d476d01c0f75e
Code
library(tidyverse)library(plotly)library(gganimate)library(gifski)
<<<<<<< HEAD
plt =ggplot(filteredData, aes(y = d_dizziness_c, x = age, colour = VRexperience)) +geom_point() +labs(x ="Age", y ="Dizziness (Eyes Closed)", col ="VR Experience") +
=======
plt =ggplot(filteredData, aes(y = d_vertigo, x = age, colour = VRexperience)) +geom_point() +labs(x ="Age", y ="Vertigo", col ="VR Experience") +
>>>>>>> 588ba637ff93f216fa9b7b06208d476d01c0f75e
transition_states(VRexperience, transition_length =1, state_length =1) +enter_fade() +exit_fade()#animate(plt, renderer = gifski_renderer())ggplotly(plt)
<<<<<<< HEAD
=======
>>>>>>> 588ba637ff93f216fa9b7b06208d476d01c0f75e
Code
library(tidyverse)library(plotly)
<<<<<<< HEAD
plt =ggplot(filteredData, aes(x = age_group, y = d_dizziness_c)) +geom_boxplot() +labs(x ="Age Group", y ="Change in BSSQ and ASSQ-Dizziness(Eyes Closed)")
=======
plt =ggplot(filteredData, aes(x = VRexperience, y = d_stomach_awareness)) +geom_boxplot() +labs(x ="VR Experience", y ="Change in BSSQ and ASSQ - Stomach Awareness")
>>>>>>> 588ba637ff93f216fa9b7b06208d476d01c0f75e
ggplotly(plt)
<<<<<<< HEAD
=======
>>>>>>> 588ba637ff93f216fa9b7b06208d476d01c0f75e
Code
library(tidyverse)library(plotly)
<<<<<<< HEAD
plt =ggplot(filteredData, aes(x = VRexperience, y = d_vertigo)) +geom_boxplot() +labs(x ="VR Experience", y ="Vertigo")
=======
plt =ggplot(filteredData, aes(x = age_group, y = d_stomach_awareness)) +geom_boxplot() +labs(x ="Age Group", y ="Change in BSSQ and ASSQ - Stomach Awareness")
>>>>>>> 588ba637ff93f216fa9b7b06208d476d01c0f75e
ggplotly(plt)
library(tidyverse)library(plotly)plt =ggplot(filteredData, aes(x = age_group, y = d_vertigo)) +geom_boxplot() +labs(x ="Age Group", y ="Change in BSSQ and ASSQ - Vertigo")ggplotly(plt)
filteredData =mutate(filteredData, age_class =case_when(age > q3 ~"older", age > q2 ~"old", age > q1 ~"young", age >0~"younger"))ggplot(filter(filteredData, age_class =="old"| age_class =="young"), aes(x = age_class, y = ssq_full)) +geom_boxplot()
Code
<<<<<<< HEAD
library(lubridate)class(filteredData$Date[1])
=======
filteredData["age_group"] =cut(filteredData$age, c(16, 22, 30, 38, 46, Inf), c("16-21", "22-29", "30-37", "38-45", "45+"), include.lowest =TRUE)ggplot(filteredData, aes(x = VRexperience, y = ssq_full, fill = VRexperience)) +stat_summary(fun ="mean", geom ="bar", position ="dodge")
Code
library(lubridate)class(filteredData$Date[1])
>>>>>>> 588ba637ff93f216fa9b7b06208d476d01c0f75e
[1] "POSIXct" "POSIXt"
Code
<<<<<<< HEAD
d = filteredData$Date[1] |>as.POSIXct()year(d) # used chatgpt for this because there is no known website in the universe that has this information for SOME REASON
=======
d = filteredData$Date[1] |>as.POSIXct()year(d) # used chatgpt for this because there is no known website in the universe that has this information for SOME REASON
>>>>>>> 588ba637ff93f216fa9b7b06208d476d01c0f75e
[1] 2021
Code
<<<<<<< HEAD
ggplot(filteredData, aes(x = generation, y = ssq_full)) +geom_boxplot()
=======
ggplot(filteredData, aes(x = generation, y = ssq_full)) +geom_boxplot()
>>>>>>> 588ba637ff93f216fa9b7b06208d476d01c0f75e
Code
<<<<<<< HEAD
ggplot(filteredData, aes(x = age, y = ssq_full, color = generation)) +geom_point()
=======
ggplot(filteredData, aes(x = age, y = ssq_full, color = generation)) +geom_point()
>>>>>>> 588ba637ff93f216fa9b7b06208d476d01c0f75e
Code
ggplot(filteredData) +geom_boxplot(aes(x ="Discomfort", y = d_discomfort, fill = VRexperience)) +geom_boxplot(aes(x ="Fatigue", y = d_fatigue, fill = VRexperience)) +geom_boxplot(aes(x ="Headache", y = d_headache, fill = VRexperience)) +geom_boxplot(aes(x ="Eyestrain", y = d_eyestrain, fill = VRexperience)) +geom_boxplot(aes(x ="Difficulty Focusing", y = d_difficulty_focusing, fill = VRexperience)) +geom_boxplot(aes(x ="Salivation", y = d_salivation, fill = VRexperience)) +geom_boxplot(aes(x ="Sweating", y = d_sweating, fill = VRexperience)) +geom_boxplot(aes(x ="Nausea", y = d_nausea, fill = VRexperience)) +geom_boxplot(aes(x ="Difficulty Concentrating", y = d_difficulty_concentrating, fill = VRexperience)) +geom_boxplot(aes(x ="Fullness of Head", y = d_fullness_of_head, fill = VRexperience)) +geom_boxplot(aes(x ="Blurred Vision", y = d_blurred_vision, fill = VRexperience)) +geom_boxplot(aes(x ="Dizziness (o)", y = d_dizziness_o, fill = VRexperience)) +geom_boxplot(aes(x ="Dizziness (c)", y = d_dizziness_c, fill = VRexperience)) +geom_boxplot(aes(x ="Vertigo", y = d_vertigo, fill = VRexperience)) +geom_boxplot(aes(x ="Stomach Awareness", y = d_stomach_awareness, fill = VRexperience)) +theme_minimal() +labs(title ="VR Experience and Symptom Change",x ="Symptom",y ="Change in Severity") +theme(axis.text.x =element_text(angle =45, hjust =1))
Code
filteredData =mutate(filteredData, age_group =case_when(age >=38~"38 to 45", age >=37~"30 to 37", age >=22~"22 to 29", age >=16~"16 to 21"))ggplot(filteredData, aes(x = age_group, y = ssq_full, fill = VRexperience)) +geom_boxplot()